package NM;

import java.util.LinkedList;
import java.util.Queue;

//用队列实现栈；
public class MyStackUseQueue {
    //模拟出栈操作；判断队列1和2是否为空，那个空就将栈中元素放入对应的队列中；
    //模拟入栈操作：将不空的队列的size-1个元素放入空队列中，将最后一个元素进行出队列；
    public Queue<Integer> qu1;
    public Queue<Integer> qu2;
    public MyStackUseQueue(){
        qu1=new LinkedList<>();
        qu2=new LinkedList<>();
    }
    //模拟入栈操作；
    public void push(int val) {
        if (!qu1.isEmpty()) {
            qu1.offer(val);
        } else if (!qu2.isEmpty()) {
            qu2.offer(val);
        } else {
            qu1.offer(val);
        }
    }
    //模拟实现出栈操作；
    public int pop(){
        if(empty()){
            return -1;
        }
        if(!qu1.isEmpty()){
            int size1= qu1.size();
            for(int i=0;i<size1-1;i++){
                qu2.offer(qu1.poll());
            }
            return qu1.poll();
        }else{
            int size2= qu2.size();
            for(int i=0;i<size2;i++){
                qu1.offer(qu2.poll());
            }
            return qu1.poll();
        }
    }
    //模拟实现获取栈顶元素；
    public int top(){
        if(empty()){
            return -1;
        }
        if(!qu1.isEmpty()){
            int size1=qu1.size();
            int val1=0;
            for(int i=0;i<size1-1;i++){
                val1=qu1.poll();
                qu2.offer(val1);
            }
            return val1;
        }else{
            int size2=qu2.size();
            int val2=0;
            for(int i=0;i<size2;i++){
                val2=qu2.poll();
                qu1.offer(val2);
            }
            return val2;
        }
    }

    //判断两个队列是否都为空队列；
    public boolean empty(){
        return qu1.isEmpty()&&qu2.isEmpty();
    }

}
